package review.Day_0402;

import java.util.Stack;

/**
 * @author zxc
 * @date 2023/04/02 17:08
 **/
public class Solution02 {
    // 维护一个栈，用来存储 所有还未找到首个大于本日温度的日子;
    public int[] dailyTemperatures(int[] temperatures) {
        Stack<Integer> stack = new Stack<>();
        // 注意 ：栈中所存储的元素，必然是单调递减的;
        // 统计temperatures中记录数
        int len = temperatures.length;
        // 新建结果数组result;
        int[] result = new int[len];
        // 遍历temperatures数组中所有元素
        for(int i = 0 ; i < len ; i++){
            // 即，使用变量nowTemp，来存储第i + 1天所对应的温度;
            int nowTemp = temperatures[i];
            // 与栈中元素逐个进行比较;
            // 即，判断当前日子的温度 是否符合栈中其他元素的条件;
            // （1）栈不为空; （2）当日温度 > 栈顶元素所对应的温度
            while(!stack.isEmpty() && nowTemp > temperatures[stack.peek()]){
                // 弹出栈顶元素 && temperatures[栈顶元素] = 间隔天数;
                int index = stack.pop();
                result[index] = i - index;
            }
            // 当前遍历的元素，是必然会被加入到栈中;
            stack.push(i);
        }
        return result;
    }
}
